package applicationModel

import dominio.Resultado
import dominio.Zombie
import java.util.ArrayList
import org.uqbar.commons.utils.Observable
import dominio.Jugador
import org.uqbar.commons.model.UserException
import dominio.Planta

@Observable
class Ataque {

	@Property Fila filaSeleccionada
	@Property Zombie zombieAtacante
	@Property String resultado
	@Property Jugador jugadorAtacado

	new(Fila filaSeleccionada,Jugador jugadorAtacado) {
		_filaSeleccionada = filaSeleccionada
		_jugadorAtacado = jugadorAtacado
	}
	
	



	def void ataca() {
		var r = new Resultado
		var zombie = zombieAtacante.clone as Zombie
		var plantaAtacada = filaSeleccionada.ultimaPlanta()

		while ((zombie.vive()) && (plantaAtacada.vive())) {

			plantaAtacada.teAtaca(zombie)

			if (!plantaAtacada.vive()) {
				r.ganoZombie(zombie.nombre, plantaAtacada.nombre)
				resultado = r.resultado
				filaSeleccionada.eliminarPlanta
				jugadorAtacado.recompensaDinero(50)
				if (filaSeleccionada.filaNula) {
					//r.perdioJugador("Los Zombies te comieron los Sesos!")
					//resultado = r.resultado
					throw new UserException("Los Zombies te comieron los Sesos!")
				} else {
					plantaAtacada = filaSeleccionada.ultimaPlanta()
				}

			}

			if (!zombie.vive()) {
				r.ganoPlanta(plantaAtacada.nombre,zombie.nombre)
				resultado = r.resultado
				zombie.recompensa(this) //CAMBIAAAR EESSTOOOO
				return
			}

		}
	}
	
	def recompensaDinero(Integer dinero) {
		var aux = this.resultado
		var r = new Resultado
		r.jugadorGanoDinero(jugadorAtacado.nombre,dinero.toString,aux)
		_resultado = r.resultado
		jugadorAtacado.recompensaDinero(dinero)
	}
	
	def recompensaPlanta(Planta planta) {
		var aux = this.resultado
		var r = new Resultado
		r.jugadorGanoPlanta(jugadorAtacado.nombre,planta.nombre,aux)
		_resultado = r.resultado
		jugadorAtacado.recompensaPlanta(planta)
	}

}
